﻿#define _CRT_SECURE_NO_WARNINGS 1
//给你⼀个整数数组nums和⼀个整数k，请你统计并返回该数组中和为k的连续⼦数组的个数。
//eg：输⼊：nums = [1, 1, 1], k = 2  输出：2

#include <iostream>
#include <vector>
#include <unordered_map>
using namespace std;

int subarraySum(vector<int>& nums, int k)
{
	unordered_map<int, int> hash;
	// 统计前缀和出现的次数
	hash[0] = 1;
	int sum = 0, ret = 0;
	for (auto x : nums)
	{
		sum += x;
		// 计算当前位置的前缀和
		if (hash.count(sum - k)) ret+= hash[sum - k];
		// 统计个数
		hash[sum]++;
	}
	return ret;
}

int main()
{
	vector<int> nums({ 1,1,1});
	int k = 2;
	int an=subarraySum(nums, k);
	cout << an << endl;

	return 0;
}